package com.vhall.component.entity.room.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.vhall.component.entity.room.enums.RoomAuditStatusEnum;
import com.vhall.component.entity.subject.enums.StatusEnum;
import com.vhall.component.entity.thirduser.ThirdUserVO;
import com.vhall.component.framework.common.annotation.ParamName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 国信项目新增的房间属性
 *
 * @author shimingming
 * @since 2023/8/3 9:09
 */
@Data
public class RoomsEntityGuoXinVO implements Serializable {

    /**
     * 所属栏目
     */
    @ApiModelProperty(value = "所属栏目")
    @ParamName("column_id")
    @JsonProperty("column_id")
    private Integer columnId;

    /**
     * 所属栏目-name
     */
    @ParamName(value = "column_name")
    @JsonProperty(value = "column_name")
    private String columnName;

    /**
     * 栏目图标图片url
     */
    @JsonProperty("column_image_url")
    @ParamName("column_image_url")
    private String columnImageUrl;

    /**
     * 直播类型: 直播类型: 1:投教类,2:投顾类,3:产品类,4:证券研究类
     */
    @ApiModelProperty(value = "直播类型: 投教类,投顾类,产品类,证券研究类")
    @ParamName("live_content_type")
    @JsonProperty("live_content_type")
    private Integer liveContentType;

    /**
     * 直播类型: 投教类,投顾类,产品类,证券研究类
     */
    @ApiModelProperty(value = "直播类型: 投教类,投顾类,产品类,证券研究类")
    @ParamName("live_content_type_name")
    @JsonProperty("live_content_type_name")
    private String liveContentTypeName;

    /**
     * 账户验证: 0:不需账户验证,1:需账户验证 ,用户需要交易登录或绑定资金账号,方可进入直播
     */
    @ApiModelProperty(value = "账户验证")
    @ParamName("account_verification")
    @JsonProperty("account_verification")
    private String accountVerification;

    /**
     * 风险等级
     * 风险等级:0:无要求,1:R1保守型,2:R2谨慎型,3:R3稳健型,4:R4积极型,5:R5激进型
     */
    @ApiModelProperty(value = "风险等级")
    @ParamName("risk_live")
    @JsonProperty("risk_live")
    private String riskLive;

    /**
     * 投资期限
     * 投资期限:0:无要求,1:0(含)到1年(含),2:1(不含)到3年(含),3:3(不含)到5年(含),4:5年(不含)以上
     */
    @ApiModelProperty(value = "投资期限")
    @ParamName("invest_limit")
    @JsonProperty("invest_limit")
    private String investLimit;

    /**
     * 投资品种
     * 投资品种:0:无要求,1:固定收益,2:A项目,3:A,B项目,4:A,B,C 项目,5:A,B,C,D项目
     */
    @ApiModelProperty(value = "投资品种")
    @ParamName("invest_type")
    @JsonProperty("invest_type")
    private String investType;

    /**
     * 业务权限
     * 业务权限:无要求:0,1:融资融券,^:港股通,E:创业板,k:科创板,w:股票期权,x:北交所
     */
    @ApiModelProperty(value = "业务权限")
    @ParamName("permissions")
    @JsonProperty("permissions")
    private String permissions;

    /**
     * 合格投资者要求
     * 合格投资者要求:0:无要求,1:仅私募合同投资者可见,2:仅资管合同投资者可见
     */
    @ApiModelProperty(value = "合格投资者要求")
    @ParamName("qualified_investor_requirements")
    @JsonProperty("qualified_investor_requirements")
    private String qualifiedInvestorRequirements;

    /**
     * 直播业务分类
     * 直播业务分类:10:养老,9:私募,8:资管,7:公募,6:融资融券,5:港股通,4:期权,3:投顾产品,2:基金投顾,1:咨询
     */
    @ApiModelProperty(value = "直播业务分类")
    @ParamName("live_business")
    @JsonProperty("live_business")
    private String liveBusiness;

    /**
     * 直播来源,从创建人身上获取
     */
    @ApiModelProperty(value = "直播来源,从创建人身上获取")
    @ParamName("org_code")
    @JsonProperty("org_code")
    private String orgCode;

    /**
     * 直播来源,从创建人身上获取
     */
    @ApiModelProperty(value = "直播来源,从创建人身上获取")
    @ParamName("org_name")
    @JsonProperty("org_name")
    private String orgName;

    /**
     * 直播目的
     * 直播目的:1:业务开通,2:销售促成,3:股票交易,4:促活,5:其他
     */
    @ApiModelProperty(value = "直播目的")
    @ParamName("live_target")
    @JsonProperty("live_target")
    private String liveTarget;

    /**
     * 直播欢迎语
     */
    @ApiModelProperty(value = "直播欢迎语")
    @ParamName("welcom_message")
    @JsonProperty("welcom_message")
    private String welcomMessage;

    /**
     * 回放审核状态
     * REJECTION(-1, "审核驳回"),
     * CHECK_PENDING(0, "待审核"),
     * APPROVED(1, "审核通过"),
     * <p>
     * SUBMIT_FOR_APPROVAL(9, "待送审"),
     * <p>
     * {@link RoomAuditStatusEnum}
     */
    @ApiModelProperty(value = "回放审核状态")
    @ParamName("playback_status")
    @JsonProperty("playback_status")
    private Integer playbackStatus;

    @ApiModelProperty(value = "回放审核备注")
    @ParamName("playback_note")
    @JsonProperty("playback_note")
    private String playbackNote;


    /**
     * 业务检查状态
     * REJECTION(-1, "审核驳回"),
     * CHECK_PENDING(0, "待审核"),
     * APPROVED(1, "审核通过"),
     * <p>
     * SUBMIT_FOR_APPROVAL(9, "待送审"),
     * <p>
     * {@link RoomAuditStatusEnum}
     */
    @ApiModelProperty(value = "业务检查状态")
    @ParamName("inspection_status")
    @JsonProperty("inspection_status")
    private Integer inspectionStatus;

    /**
     * 正式/测试房间标识 测试直播:0,正式直播:1
     */
    @JsonProperty("live_rormal")
    @ParamName("live_rormal")
    private Integer liveRormal;
    /**
     * OA审核关联,审核 id
     */
    @JsonProperty("review_oa_id")
    @ParamName("review_oa_id")
    private String reviewOaId;

    /**
     * OA审核关联,审核标题
     */
    @JsonProperty("review_oa_name")
    @ParamName("review_oa_name")
    private String reviewOaName;

    /**
     * OA审核关联,审核链接
     */
    @JsonProperty("review_oa_url")
    @ParamName("review_oa_url")
    private String reviewOaUrl;

    /**
     * 主播信息 list
     */
    @ParamName("anchor_info_list")
    @JsonProperty("anchor_info_list")
    private List<ThirdUserVO> anchorInfoList;




    /**
     * 是否有回放
     * 0 没有回放，1 有
     */
    @ApiModelProperty(value = "是否有回放")
    @ParamName("playback_flag")
    @JsonProperty("playback_flag")
    private Integer playbackFlag;

    /**
     * 聊天管理-直播中 标记位
     * 0 关
     * 1 开
     * <p>
     * {@link StatusEnum}
     */
    @JsonProperty("chat_management_live_status")
    @ParamName("chat_management_live_status")
    private Integer chatManagementLiveStatus;

    /**
     * 聊天管理-回放 标记位
     * 0 关
     * 1 开
     * <p>
     * {@link StatusEnum}
     */
    @JsonProperty("chat_management_playback_status")
    @ParamName("chat_management_playback_status")
    private Integer chatManagementPlaybackStatus;

    /**
     * 合规检查状态
     * REJECTION(-1, "审核驳回"),
     * CHECK_PENDING(0, "待审核"),
     * APPROVED(1, "审核通过"),
     * <p>
     * SUBMIT_FOR_APPROVAL(9, "待送审"),
     * <p>
     * {@link RoomAuditStatusEnum}
     */
    @JsonProperty("compliance_check_status")
    @ParamName("compliance_check_status")
    private Integer complianceCheckStatus;

    @JsonProperty("compliance_check_note")
    @ParamName("compliance_check_note")
    private String complianceCheckNote;

    /**
     * 迁移数据标记 0 新系统数据；1迁移而来的数据
     */
    @ParamName("migration")
    @JsonProperty("migration")
    private Integer migration;

    /**
     * 观看总人数(该数据为从旧系统迁移汇总而来)
     */
    @ParamName("total_number_of_viewers")
    @JsonProperty("total_number_of_viewers")
    private Integer totalNumberOfViewers;

    /**
     * 观看总次数(该数据为从旧系统迁移汇总而来)
     */
    @ParamName("total_number_of_views")
    @JsonProperty("total_number_of_views")
    private Integer totalNumberOfViews;

    /**
     * 从旧系统迁移数据过来的时间
     */
    @ParamName("migrate_at")
    @JsonProperty("migrate_at")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime migrateAt;

    /**
     * 暖场类型
     * v2.0新增
     */
    @ParamName("warm_type")
    @JsonProperty("warm_type")
    private Integer warmType ;
    /**
     * 暖场视频id
     * v2.0新增
     */
    @ParamName("warm_vod_id")
    @JsonProperty("warm_vod_id")
    private String warmVodId;
    /**
     * 适当性豁免产品的编号产品编号列表
     * v2.0新增
     */
    @ParamName("exempt_prod_codes")
    @JsonProperty("exempt_prod_codes")
    private List<String> exemptProdCodes;
    /**
     * 直播入口设置
     * 直播入口设置| 0：入口在国信直播间显示, 1：入口不在国信直播间显示
     * v2.0新增
     */
    @ParamName("live_inlet")
    @JsonProperty("live_inlet")
    private Integer liveInlet;
    /**
     * 是否为付费直播字段
     * 是否为付费直播| 0：不是付费直播, 1：是付费直播
     * v2.0新增
     */
    @ParamName("is_paid")
    @JsonProperty("is_paid")
    private Integer isPaid;
    /**
     * 付费产品编号
     * v2.0新增
     */
    @ParamName("paid_product_code")
    @JsonProperty("paid_product_code")
    private String paidProductCode;
    /**
     * 国信观看用户范围类型| 0：所有用户可见, 1：仅限持仓产品的客户可见,2:指定白名单手机号用户可见
     * 默认:0
     * v2.0新增
     */
    @ParamName("limit_user_scope")
    @JsonProperty("limit_user_scope")
    private Integer limitUserScope;

    /**
     * 表情开关 标记位
     * 0 关
     * 1 开
     * <p>
     * {@link StatusEnum}
     */
    @JsonProperty("gift_live_status")
    @ParamName("gift_live_status")
    private Integer giftLiveStatus;

    /**
     * 回放审核状态(产品类二次审核)
     * REJECTION(-1, "审核驳回"),
     * CHECK_PENDING(0, "待审核"),
     * APPROVED(1, "审核通过"),
     * <p>
     * SUBMIT_FOR_APPROVAL(9, "待送审"),
     * <p>
     * {@link RoomAuditStatusEnum}
     */
    @JsonProperty("playback_status_second")
    @ParamName("playback_status_second")
    private Integer playbackStatusSecond;

    /**
     * 回放审核备注(产品类二次审核)
     */
    @JsonProperty("playback_note_second")
    @ParamName("playback_note_second")
    private String playbackNoteSecond;

    /**
     * 仅限持仓产品的客户可见-产品code列表
     * 单个产品长度不超过64长度
     * v2.0新增
     * 没有的时候传递空数组
     */
    @ParamName("visible_prod_codes")
    @JsonProperty("visible_prod_codes")
    private List<String> visibleProdCodes;
    /**
     * 白名单关联文件 id
     * v2.0新增
     * 无的时候传递 0
     */
    @ParamName("white_file_id")
    @JsonProperty("white_file_id")
    private Integer whiteFileId;


    /**
     * 审核通知人员
     */
    @JsonProperty(value = "audit_notify_user")
    @ParamName(value = "audit_notify_user")
    private String auditNotifyUser;

    /**
     * 回放审核状态(产品类二次审核)
     * REJECTION(-1, "审核驳回"),
     * CHECK_PENDING(0, "待审核"),
     * APPROVED(1, "审核通过"),
     * <p>
     * SUBMIT_FOR_APPROVAL(9, "待送审"),
     * <p>
     * {@link RoomAuditStatusEnum}
     */
    @JsonProperty("playback_status_final")
    @ParamName("playback_status_final")
    private Integer playbackStatusFinal;

    /**
     * 回放审核备注(产品类二次审核)
     */
    @JsonProperty("playback_note_final")
    @ParamName("playback_note_final")
    private String playbackNoteFinal;
}
